package LinkedList;

public class Josepfu {
    public static void main(String[] args){
        CircleSingleLinkedList list = new CircleSingleLinkedList();
        list.add(10);
        list.show();
    }
}

// 定义节点
class Kid{
    int no;
    Kid next; // 指针，指向下一个节点，默认为null

    // 构造方法
    public Kid(int no){
        this.no = no;
    }
}

// 定义单向环形链表
class CircleSingleLinkedList {
    // 先初始化一个指针first，用于指向第一个节点，默认初始化为空
    Kid first;

    // 根据节点数量添加节点
    public void add(int no){
        // 我们先要对no的合理性做一个判断
        if(no < 1){
            System.out.println("no的值不合理");
            return;
        }
        Kid curp = new Kid(-1); // 辅助指针，帮助我们形成环形链表，编号默认为-1
        // 开始添加
        for (int i = 1; i <= no; i++){
            Kid kid = new Kid(i); // 根据编号创建节点
            if(i == 1){ // 第一个节点要特殊分析
                first = kid;
                kid.next = first; // 以形成一个环形
                curp = kid;
            }else{
                curp.next = kid;
                kid.next = first;
                curp = kid; // curp后移
            }
        }
    }

    // 遍历单向环形链表中所有的节点
    public void show(){
        // 判断单向环形链表是否为空
        if(first == null){
            System.out.println("链表为空，没有任何节点");
            return;
        }
        Kid curp = first;
        while (true) {
            System.out.printf("编号为%d的小孩已入圈\n",curp.no);
            if(curp.next == first){ // 已遍历完所有节点
                break;
            }
            curp = curp.next;
        }

    }
}
